﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Csla.Validation;
using GeneralUtilities;

namespace GanagroLiteBO
{
    public partial class MuerteBO : Operacion_BO, IOperacion
    {
        public MuerteBO()
        {
            AddAdtlBusinessRules();
        }

        #region Validation Rules

        protected static bool ValidaCodigo<T>(T target, Csla.Validation.RuleArgs e) where T : MuerteBO
        {
            string message = string.Empty;
            bool success = true;

            if (string.IsNullOrEmpty(target.CODIGO.Trim()))
            {
                e.Description = "Codigo no puede ser vacio.";
                success = false;
            }

            if (utilities.CodigoEsValido(target.CODIGO, ref message, TiposOperacion.Muerte) == false)
            {
                e.Description = message;
                success = false;
            }

            target.Isvalid = success;

            return success;
        }

        protected void AddAdtlBusinessRules()
        {
            try
            {
                ValidationRules.AddRule(new Csla.Validation.RuleHandler<MuerteBO,RuleArgs>(ValidaCodigo), "CODIGO");
                ValidationRules.AddRule(new Csla.Validation.RuleHandler<MuerteBO,RuleArgs>(utilities.FechaValida), "Fecha");
                
            }
            catch (Exception ex)
            {
                throw (new Exception("AddAdtlBusinessRules: " + ex.Message, ex));
            }
        }

        #endregion

        #region Methods
        new public void Guardar()
        {
            if (!this.IsValid())
            {
                return;
            }

            GANADO_BO _currentGanado = new GANADO_BO(CODIGO);
            _currentGanado.DarDeBaja(this.FECHA,TiposOperacion.Muerte);

            // guardar en tabla de operaciones
            base.Guardar();

        }

        #endregion

        #region IOperacion Members

        public Boolean Isvalid
        {
            get { return this.IsValid(); }
            set
            {
                FirePropertyChangedNotification("Isvalid");
            }
        }

        public short? Peso { get; set; }

        #endregion
    }
}
